prompt No.000 SP_SST_MZ_Nation_YNJSQR 门诊院内结算确认 create or replace procedure SP_SST_MZ_Nation_YNJSQR ( P_BRID00 in number ,--输入:病人ID P_GHID00 in number ,--输入:挂号ID P_JZDH00 in number ,--输入:结账单号 P_YBTYPE in varchar2 ,--输入: 医保接口类型[-1 :自费 0或空:福建版本 1:国家基线版] P_CZY000 in number ,--输入:操作员编码 P_CZYXM0 in varchar2 ,--输入:操作员姓名 P_XTGZH0 in varchar2 ,--输入:系统跟踪号 P_BYRC00 in varchar2 ,--输入:备用入参 P_INXML0 in varchar2 ,--输入:入参xml P_ERRMSG out varchar2 ,--输出:出错信息 P_ZXZT00 out number ,--输出:执行状态 0:失败 1:成功 P_OUTXML out varchar2 --输出:备用出参xml ) as -- MODIFICATION HISTORY -- Person Date Comments --zhangyc 2022.03.08 create; --zhangyc 2022.04.11 修改基本信息 --zhangyc 2022.08.05 结账表表保存cvl_acct_pay、cvl_acct_balc、pur_acct_pay、insuplc_admdvs、mdtrtarea_admvs、psn_no 等等 by --zhangyc 2022.12.06 增加参数SF_ZeroCost_Open控制是否允许0费用结算(1:开启 0:关闭) --zhangyc 2023.03.01 结账表增加写入:dise_codg,dise_name --zhangyc 2023.05.05 【参数:SF_ZFCFBZ_FBBH00控制】YF_MZCF00.ZFCFBZ=1(自费处方标志:0:正常处方 1:自费处方)独立生成一笔结算记录,并且SST_JSDP_JBXX.CFFB00=ZF(处方费别 YB:医保处方 ZF:自费处方) --zhangyc 2023.12.04 移动结算、多点结算接口优化 by ZZJJK-20231205-001 --zhangyc 2024.04.08 修改SF_JZB000.SJCZY0:实际操作员 --zhangyc 2024.10.30 根据收费需求MZSF-20241025-002处理特殊病种,非特殊病种医保独立挂号问题,调用过程:SP_SF_UPDATE_YBGHH0 --zhangyc 2025.01.20 参考业务过程SP_SF_INSERT_JZQDMX,自费和医保费用明细都写入到表SF_YBSFMX --zhangyc 2025.04.28 日志保存其它相关字段minpacunt_drug_trac_cnt:本次结算应上传最小包装药品追溯码数量,mcs_trac_cnt:本次结算应上传耗材追溯码数量 -- dsm 2025.06.20 增加调用SP_SF_YPZSM0_XSTHCL for YF-20250620-004 --zhangyc 2025.08.22 参考SP_SF_BRFY00_JS0000调用过程SP_SF_YJYWZX LS_COUNT0 number(12,2); LS_CZRQ00 char(8); LS_CZSJ00 char(8); LS_YGBH00 BM_YGBM00.YGBH00%type; --员工编码 LS_ZWXM00 BM_YGBM00.ZWXM00%type; --员工姓名 LS_XKH000 BM_YGBM00.XKH000%type; --员工胸卡好 LS_CZYKS0 BM_YGBM00.BMBH00%type; --员工科室编码 BM_XZQH00 BM_BRXXB0.XZQH00%type;--行政区划 BM_AAE140 BM_BRXXB0.AAE140%type;--险种类型编码 BM_AAE140_MC BM_BRXXB0.AAE140_MC%type;--险种类型名称 BM_PSN_NO BM_BRXXB0.PSN_NO%type;--[国家医保]人员编号 BM_BKC001_MC BM_BRXXB0.BKC001_MC%type;--人员待遇类别名称 BM_FBBH00 BM_BRXXB0.FBBH00%type;--费别编码 LS_YBJKID SST_JSDP_JBXX.YBJKID%type; LS_insuplc_admdvs SST_JSDP_JBXX.insuplc_admdvs%type;--varchar2(10) null ,--[国家医保]参保地行政区划(aab301) LS_mdtrtarea_admvs SST_JSDP_JBXX.mdtrtarea_admvs%type;---mdtrtarea_admvs 就医地医保区划 LS_insutype SST_JSDP_JBXX.insutype%type;--varchar2(10) null ,--[国家医保]险种类型(aae140) LS_psn_no SST_JSDP_JBXX.psn_no%type;--varchar2(30) null ,--[国家医保]人员编号 LS_psn_type SST_JSDP_JBXX.psn_type%type;--varchar2(10) null ,--[国家医保]人员待遇类别(bkc001) LS_aae140 SF_JZB000.aae140%type;--险种类型编码:310 城镇职工基本医疗保险 320:公务员医疗补助 380:新型农村合作医疗 390:城乡居民基本医疗保险 410:工伤保险 510:生育保险 520:机关生育 LS_aae140_mc SF_JZB000.aae140_mc%type;--险种类型名称:城乡居民基本医疗保险、城镇职工基本医疗保险等等 LS_bkc001_mc SF_JZB000.bkc001_mc%type;--人员待遇类别名称(城乡居民、普通在职人员等等) LS_cvl_acct_pay SST_JSDP_JBXX.cvl_acct_pay%type;--cvl_acct_pay 公务员账户支付 LS_cvl_acct_balc SST_JSDP_JBXX.cvl_acct_balc%type;--cvl_acct_balc 公务员余额 LS_hl_acct_pay SST_JSDP_JBXX.hl_acct_pay%type;--hl_acct_pay 健康账户支付=YBYL11 LS_hl_acct_balc SST_JSDP_JBXX.hl_acct_balc%type;--hl_acct_balc 健康账户余额=YBYL12 LS_acct_mulaid_pay SST_JSDP_JBXX.acct_mulaid_pay%type;--acct_mulaid_pay 共济账户支付=YBYL13 LS_fm_acct_balc SST_JSDP_JBXX.fm_acct_balc%type;--fm_acct_balc 共济账户余额=YBYL14 LS_pur_acct_pay SST_JSDP_JBXX.pur_acct_pay%type;--pur_acct_pay 医疗账户支付 LS_bke297 SST_JSDP_JBXX.bke297%type;--医保明细流水号 LS_chrg_bchno SST_JSDP_JBXX.chrg_bchno%type;--收费批次号 LS_dise_codg SST_JSDP_JBXX.dise_codg%type;--病情编码 LS_dise_name SST_JSDP_JBXX.dise_name%type;--病情名称 LS_YBBZ00 SST_JSDP_JBXX.YBBZ00%type;--自助机填写:医保标志(区分新旧医保)1:新医保,0:旧医保 2:国家基线版本 LS_tsbzbh SST_JSDP_JBXX.tsbzbh%type;-- LS_MZLSH0 SST_JSDP_JBXX.MZLSH0%type;-- LS_akc190 SST_JSDP_JBXX.akc190%type;-- LS_mdtrt_id SST_JSDP_JBXX.mdtrt_id%type;-- LS_med_type SST_JSDP_JBXX.med_type%type;-- LS_begntime SST_JSDP_JBXX.begntime%type;-- LS_CFFB00 SST_JSDP_JBXX.CFFB00%type;--ZF(处方费别 YB:医保处方 ZF:自费处方) YBXZQH_mdtrtarea_admvs varchar2(10);--[国家医保]就医地医保区划 LS_setl_time varchar2(20);--setl_time:结算时间 LS_YBJZRQ varchar2(8);--医保结算日期 LS_YBJZSJ varchar2(8);--医保结算时间 LS_XMLSTR varchar2(4000);-- Pro_Out_ZXZT00 varchar2(10);--[出参]:执行状态 0:失败 1:成功 Pro_Out_ERRMSG varchar2(240);--[出参]:错误信息 Pro_Out_OUTXML varchar2(2000);--[出参]:出参xml begin P_ZXZT00:=0; --输出:执行状态 0:失败 1:成功 P_ERRMSG:=null;--输出:出错信息 P_OUTXML:=null; --输出:备用出参xml LS_CZRQ00:=to_char(sysdate,'YYYYMMDD'); LS_CZSJ00:=to_char(sysdate,'HH24:MI:SS'); begin select YGBH00,ZWXM00,XKH000,BMBH00 into LS_YGBH00,LS_ZWXM00,LS_XKH000,LS_CZYKS0 from BM_YGBM00 where YGBH00=P_CZY000; exception when others then P_ZXZT00:=0; --输出:执行状态 0:失败 1:成功 P_ERRMSG:='未找到员工信息!YGBH00='||P_CZY000; return; end; --查询基本信息表 if nvl(P_BRID00,0)>0 then begin select a.XZQH00,a.AAE140,a.AAE140_MC,a.PSN_NO,a.BKC001_MC,a.FBBH00 into BM_XZQH00,BM_AAE140,BM_AAE140_MC,BM_PSN_NO,BM_BKC001_MC,BM_FBBH00 from BM_BRXXB0 a Where a.brid00=P_BRID00; exception when others then BM_XZQH00 :=null;--行政区划 BM_AAE140 :=null;--险种类型编码 BM_AAE140_MC :=null;--险种类型名称 BM_PSN_NO :=null;--[国家医保]人员编号 BM_BKC001_MC :=null;--人员待遇类别名称 end; if BM_XZQH00 in ('本地') then BM_XZQH00:=null; end if; end if; if nvl(P_BRID00,0)>0 and P_XTGZH0 is not null and P_XTGZH0 not in ('0') then begin select a.insuplc_admdvs,a.mdtrtarea_admvs,a.insutype,a.psn_no,a.psn_type, a.cvl_acct_pay,a.cvl_acct_balc,a.hl_acct_pay,a.hl_acct_balc, a.acct_mulaid_pay,a.fm_acct_balc,a.pur_acct_pay, a.bke297,a.chrg_bchno,a.YBJKID,a.setl_time,trim(a.dise_codg)as dise_codg,trim(a.dise_name) as dise_name, a.YBBZ00,a.tsbzbh,a.MZLSH0,a.akc190,a.mdtrt_id,a.med_type,a.begntime,a.CFFB00 into LS_insuplc_admdvs,LS_mdtrtarea_admvs,LS_insutype,LS_psn_no,LS_psn_type, LS_cvl_acct_pay,LS_cvl_acct_balc,LS_hl_acct_pay,LS_hl_acct_balc, LS_acct_mulaid_pay,LS_fm_acct_balc,LS_pur_acct_pay, LS_bke297,LS_chrg_bchno,LS_YBJKID,LS_setl_time,LS_dise_codg,LS_dise_name, LS_YBBZ00,LS_tsbzbh,LS_MZLSH0,LS_akc190,LS_mdtrt_id,LS_med_type,LS_begntime,LS_CFFB00 from SST_JSDP_JBXX A where A.BRID00=P_BRID00 and A.XTGZH0=P_XTGZH0; exception when others then LS_insuplc_admdvs:=null;--[国家医保]参保地行政区划(aab301) LS_insutype:=null;--[国家医保]险种类型(aae140) LS_psn_no:=null; --[国家医保]人员编号 LS_psn_type:=null; LS_cvl_acct_pay :=null;--cvl_acct_pay 公务员账户支付 LS_cvl_acct_balc :=null;--cvl_acct_balc 公务员余额 LS_hl_acct_pay :=null;--hl_acct_pay 健康账户支付=YBYL11 LS_hl_acct_balc :=null;--hl_acct_balc 健康账户余额=YBYL12 LS_acct_mulaid_pay :=null;--acct_mulaid_pay 共济账户支付=YBYL13 LS_fm_acct_balc :=null;--fm_acct_balc 共济账户余额=YBYL14 LS_pur_acct_pay :=null;--pur_acct_pay 医疗账户支付 LS_bke297 :=null;--医保明细流水号 LS_chrg_bchno :=null;--收费批次号 LS_dise_codg :=null;--病情编码 LS_dise_name :=null;--病情名称 end; --医保标志(区分新旧医保)1:新医保,0:旧医保 2:国家基线版本 if LS_mdtrt_id is null then if LS_YBBZ00='2' then LS_mdtrt_id:=substrb(trim(LS_mdtrt_id),1,30);--医保挂号号 elsif LS_YBBZ00='1' then LS_mdtrt_id:=substrb(trim(LS_akc190),1,30);--医保挂号号 elsif LS_YBBZ00='0' then LS_mdtrt_id:=substrb(trim(LS_MZLSH0),1,30);--医保挂号号 end if; end if; if LS_mdtrt_id='0' then LS_mdtrt_id:=null; end if; LS_chrg_bchno :=substrb(nvl(LS_bke297,LS_chrg_bchno),1,30);--收费批次号 if LS_setl_time is not null and lengthb(LS_setl_time)=19 then LS_setl_time:=replace(LS_setl_time,'-',''); LS_YBJZRQ:=trim(substrb(LS_setl_time,1,8));--医保结算日期 LS_YBJZSJ:=trim(substrb(LS_setl_time,9,16));--医保结算时间 end if; LS_insuplc_admdvs:=substrb(nvl(LS_insuplc_admdvs,BM_XZQH00),1,10);--insuplc_admdvs 参保地医保区划 --获取就医地mdtrtarea_admvs if LS_insuplc_admdvs is not null then begin select A.mdtrtarea_admvs into YBXZQH_mdtrtarea_admvs from BM_YBXZQH A where A.admdvs_code=LS_insuplc_admdvs; exception when others then YBXZQH_mdtrtarea_admvs:=null;--[国家医保]就医地医保区划 end; if LS_mdtrtarea_admvs is not null then LS_mdtrtarea_admvs:=LS_mdtrtarea_admvs; else if YBXZQH_mdtrtarea_admvs is not null then LS_mdtrtarea_admvs:=YBXZQH_mdtrtarea_admvs;--就医地医保区划 end if; if LS_mdtrtarea_admvs is null then LS_mdtrtarea_admvs :=substrb(SF_SF_TYZD00('医保新接口参数设置','mdtrtarea_admvs'),1,10);--varchar2(10);--mdtrtarea_admvs 就医地医保区划 end if; end if; end if; LS_aae140:=substrb(nvl(LS_insutype,BM_AAE140),1,10);--险种类型编码 if LS_aae140 is not null then LS_aae140_mc:=substrb(SF_XT_GETYBSXZD('insutype',LS_aae140,'3','2'),1,50); end if; if LS_psn_type is not null then --[国家医保]人员待遇类别(bkc001) LS_BKC001_MC := substrb(SF_XT_GETYBSXZD('psn_type',LS_psn_type,'3','2'),1,50); --人员待遇类别名称 end if; LS_aae140_mc:=substrb(nvl(LS_aae140_mc,BM_AAE140_MC),1,50); LS_BKC001_MC:=substrb(nvl(LS_BKC001_MC,BM_BKC001_MC),1,50); LS_psn_no:=substrb(nvl(LS_psn_no,BM_PSN_NO),1,30); LS_XMLSTR:=substrb(LS_XMLSTR||SF_XT_XMLJSON('med_type',LS_med_type,0,0,null,null),1,4000);--med_type ,--医疗类别(11:普通门诊 14:门诊慢特病 等等) LS_XMLSTR:=substrb(LS_XMLSTR||SF_XT_XMLJSON('begntime',LS_begntime,0,0,null,null),1,4000);--begntime ,--就诊时间:YYYY-MM-DD HH24:MI:SS LS_XMLSTR:=substrb(LS_XMLSTR||SF_XT_XMLJSON('dise_codg',LS_dise_codg,0,0,null,null),1,4000);--dise_codg,--病种编码 LS_XMLSTR:=substrb(LS_XMLSTR||SF_XT_XMLJSON('dise_name',LS_dise_name,0,0,null,null),1,4000);--dise_name,--病种名称 LS_XMLSTR:=substrb(LS_XMLSTR||SF_XT_XMLJSON('mdtrt_id', LS_mdtrt_id,0,0,null,null),1,4000);--mdtrt_id ,--医保就诊ID(医保挂号号) --更新BM_BRXXB0 update BM_BRXXB0 set bkc001_mc=substrb(nvl(LS_BKC001_MC,BKC001_MC),1,50) ,--人员待遇类别名称(城乡居民、普通在职人员等等) aae140=substrb(nvl(LS_AAE140,AAE140),1,10) ,--险种类型编码: aae140_mc=substrb(nvl(LS_AAE140_MC,AAE140_MC),1,50) ,--险种类型名称(城乡居民基本医疗保险、城镇职工基本医疗保险等等) psn_no=substrb(nvl(LS_psn_no,psn_no),1,30) ,--psn_no[国家医保]人员编号 xzqh00=substrb(nvl(LS_insuplc_admdvs,xzqh00),1,10) --行政区号 where BRID00=P_BRID00; if nvl(P_JZDH00,0)>0 then update SF_JZB000 set bkc001_mc=substrb(LS_bkc001_mc,1,50), aae140=substrb(nvl(LS_AAE140,AAE140),1,10) ,--险种类型:310 城镇职工基本医疗保险 320:公务员医疗补助 380:新型农村合作医疗 390:城乡居民基本医疗保险 410:工伤保险 510:生育保险 520:机关生育 aae140_mc=substrb(nvl(LS_AAE140_MC,AAE140_MC),1,50) ,--险种类型名称(城乡居民基本医疗保险、城镇职工基本医疗保险等等) psn_type=substrb(LS_psn_type,1,10) ,--[国家医保]人员类别(bkc001) YBYL11 =nvl(nvl(LS_hl_acct_pay,YBYL11),0) ,--健康账户支付 YBYL12 =nvl(nvl(LS_hl_acct_balc,YBYL12),0) ,--健康账户余额 YBYL13 =nvl(nvl(LS_acct_mulaid_pay,YBYL13),0) ,--共济账户支付 YBYL14 =nvl(nvl(LS_fm_acct_balc,YBYL14),0) ,--共济账户余额 cvl_acct_pay=nvl(nvl(LS_cvl_acct_pay,cvl_acct_pay),0) ,--公务员账户支付 cvl_acct_balc=nvl(nvl(LS_cvl_acct_balc,cvl_acct_balc),0) , --公务员余额 pur_acct_pay=nvl(nvl(LS_pur_acct_pay,pur_acct_pay),0) ,--医疗账户支付 insuplc_admdvs=substrb(nvl(LS_insuplc_admdvs,insuplc_admdvs),1,10) ,--参保地行政区划 mdtrtarea_admvs=substrb(nvl(LS_mdtrtarea_admvs,mdtrtarea_admvs),1,10) ,--就医地医保区划 psn_no =substrb(nvl(LS_psn_no,psn_no),1,30) ,--人员编号 MXLSH0=substrb(nvl(LS_chrg_bchno,MXLSH0),1,50) , YBJZRQ=substrb(nvl(LS_YBJZRQ,YBJZRQ),1,8) ,--医保结算日期 YBJZSJ=substrb(nvl(LS_YBJZSJ,YBJZSJ),1,8) ,--医保结算时间 dise_codg=substrb(LS_dise_codg,1,30) ,--病情编码 dise_name=substrb(LS_dise_name,1,200) ,--病情名称 SJCZY0=P_CZY000 --实际操作员 where BRID00=P_BRID00 and JZDH00=P_JZDH00; --修改SF_YBSFMX 结账单号 update SF_YBSFMX set JZDH00=P_JZDH00 where YBJKID=LS_YBJKID; end if; end if; if (BM_FBBH00=3) and (LS_CFFB00='YB') then SP_SF_UPDATE_YBGHH0 ( LS_YGBH00,--PCZY000 in number ,--输入:操作员编码 LS_ZWXM00,--PCZYXM0 in varchar2 ,--输入:操作员姓名 LS_CZYKS0,--PCZYKS0 in number ,--输入:操作员科室 P_BRID00,--PBRID00 in number ,--输入:BRID00 P_GHID00,--PGHID00 in number ,--输入:挂号ID trim(LS_tsbzbh),--PTSBZBH in varchar2 ,--输入:特殊病种编码 trim(LS_mdtrt_id),--PYBGHH0 in varchar2 ,--输入:医保挂号号 LS_YBJKID,--PYBJKID in varchar2 ,--输入:医保接口ID P_XTGZH0,--PXTGZH0 in varchar2 ,--输入:系统跟踪号 LS_XMLSTR,--PXMLSTR in varchar2 ,--输入:XML参数 'N',--PCOMMIT in varchar2 ,--输入:是否提交事务 Y:提交 N:不提交 P_ZXZT00,--PZXZT00 out number ,--输出:执行状态 0:失败 1:成功 P_ERRMSG--PERRMSG out varchar2 --输出:错误信息 ); if P_ZXZT00=0 then P_ZXZT00:=0; --输出:执行状态 0:失败 1:成功 P_ERRMSG:='执行业务过程SP_SF_UPDATE_YBGHH0失败,错误原因:'||P_ERRMSG; return; end if; end if; --2025.08.22 医技执行 SP_SF_YJYWZX(P_BRID00, P_JZDH00); --调用门诊收费费用结算结账清单明细 SP_SF_INSERT_JZQDMX SP_SF_INSERT_JZQDMX ( LS_YGBH00,--PCZY000 in number ,--[入参]:操作员编码 LS_ZWXM00,--PCZYXM0 in varchar2 ,--[入参]:操作员姓名 LS_CZYKS0,--PCZYKS0 in number ,--[入参][入参]:操作员科室 '0',--PTYPE00 in varchar2 ,--[入参]:类型 0:结算后调用 1:重新结算后调用 5204:医保费用明细查询 P_BRID00,--PBRID00 in number ,--[入参]:BRID00 P_GHID00,--PGHID00 in number ,--[入参]:挂号ID P_JZDH00,--PJZDH00 in number ,--[入参]:结账单号 0,--PCXJZDH in number ,--[入参]:冲销结账单号 P_XTGZH0,--PXTGZH0 in varchar2 ,--[入参]:系统跟踪号 '',--PINTXML in varchar2 ,--[入参]:备用参数xml 'N',--PCOMMIT in varchar2 ,--[入参]:是否提交事务 Y:是 N:否 Pro_Out_ZXZT00,--PZXZT00 out varchar2 ,--[出参]:执行状态 0:失败 1:成功 Pro_Out_ERRMSG,--PERRMSG out varchar2 ,--[出参]:错误信息 Pro_Out_OUTXML--POUTXML out varchar2 --[出参]:出参xml ); begin --select BMBH00 into LS_CZYKS0 from BM_YGBM00 where YGBH00=P_CZY000; SP_SF_YPZSM0_XSTHCL( Pywlx00=>'2', Pjzdh00=>P_JZDH00, --结算单号 Pczy000=>P_CZY000, --操作员 Pczyxm0=>P_CZYXM0, --操作员姓名 Pczyks0=>LS_CZYKS0, --操作员科室 Pinxml0=>'' , --xml入参 Pcommit=>'N' , --是否提交 Poutxml=>P_OUTXML, Pzxcgbz=>P_ZXZT00 , --执行成功标志 1成功 0失败 Ptsxx00=>P_ERRMSG , --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00=>P_ERRMSG --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 ); exception when others then P_ZXZT00 := 1; end; P_ZXZT00:=1; --输出:执行状态 0:失败 1:成功 P_ERRMSG:=null; --输出:错误信息 P_OUTXML:=null; --输出:备用出参xml exception when no_data_found then P_ZXZT00:=0; P_ERRMSG:=substrb('门诊结算确认保存失败!原因:'||sqlerrm,1,200); when others then P_ZXZT00:=0; P_ERRMSG:=substrb('门诊结算确认保存失败!原因:'||sqlerrm,1,200); end; / show error; --%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%